package com.elitedatai.mchtest.mission.repository;

import com.elitedatai.mchtest.mission.entity.FlightPlan;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface FlightPlanRepository extends JpaRepository<FlightPlan,Long> {
    
    /**
     * 分页查询所有飞行计划，按创建时间降序排列
     * @param pageable 分页参数
     * @return 分页结果
     */
    @Query("SELECT f FROM FlightPlan f ORDER BY f.createTime DESC")
    Page<FlightPlan> findAllOrderByCreateTimeDesc(Pageable pageable);
    
    /**
     * 根据状态分页查询飞行计划
     * @param status 状态
     * @param pageable 分页参数
     * @return 分页结果
     */
    Page<FlightPlan> findByStatusOrderByCreateTimeDesc(Integer status, Pageable pageable);
    
    /**
     * 根据机场序列号分页查询飞行计划
     * @param dockSn 机场序列号
     * @param pageable 分页参数
     * @return 分页结果
     */
    Page<FlightPlan> findByDockSnOrderByCreateTimeDesc(String dockSn, Pageable pageable);
    
    /**
     * 根据飞手ID分页查询飞行计划
     * @param flyerId 飞手ID
     * @param pageable 分页参数
     * @return 分页结果
     */
    Page<FlightPlan> findByFlyerIdOrderByCreateTimeDesc(String flyerId, Pageable pageable);

    Optional<FlightPlan> findByPlanId(String planId);
    
    /**
     * 根据任务ID更新飞行计划状态
     * @param jobId 任务ID
     * @param status 新状态
     * @return 更新的记录数
     */
    @Modifying
    @Query("UPDATE FlightPlan f SET f.status = :status WHERE f.jobId = :jobId")
    int updateStatusByJobId(@Param("jobId") String jobId, @Param("status") Integer status);
}
